fix(policy): validate the applicable advisor candidate - #2850
Conversation
|
🌿 Preview your docs: https://nvidia-preview-pr-2850.docs.buildwithfern.com/openshell |
BlockedHead SHA: Gator is blocked because PR #2850 has merge conflicts with Next action: @johntmyers, update the branch from current |
2d72d06 to
6b82f88
Compare
johntmyers
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Validation: Project-valid implementation of accepted issue #2821, covering exact-candidate evaluation, actionable application failures, and preservation of inspected endpoint contracts.
Head SHA: 6b82f885654867d1b2fe391fff2610dfc35283b5
Base SHA: ef296806f52c03956a4bb7ce9a384105160f9c6a
Merge base SHA: ef296806f52c03956a4bb7ce9a384105160f9c6a
Patch ID: f04e290221220295af9e228daa89d7891c2992fe
Gator payload: 4
Review mode: initial
Previous reviewed SHA: none
Review budget exhausted: no
Maintainer decision required: no
Blocking findings:
GATOR-6b82f885-01: Review tokens and effective-policy hashes use non-canonical protobuf encodings for nested map fields, so unchanged supported policies can appear stale.GATOR-6b82f885-02: Canonicalizing a one-port denial against a multi-port inspected endpoint can grant the new binary every port in that endpoint.
Carried findings:
- None
Non-blocking suggestions:
- None
Docs: Fern documentation and the related CLI skill/reference were updated for the user-visible review-token and application-error behavior.
Next state: gator:in-review
6b82f88 to
d9d38a5
Compare
Addressed both blocking Gator findings in
Verification:
|
johntmyers
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Validation: Project-valid implementation of accepted issue #2821, covering exact-candidate evaluation, actionable application failures, and preservation of inspected endpoint contracts.
Head SHA: d9d38a561944dd041342c004dbfe6ff5b3c8d8de
Base SHA: 6c34a3c6458f1c1852fb9a89bb89b778a99fa19b
Merge base SHA: 6c34a3c6458f1c1852fb9a89bb89b778a99fa19b
Patch ID: e623f3b05064d830132c4a6d3fe099bba96f4397
Gator payload: 4
Review mode: follow_up
Previous reviewed SHA: 6b82f885654867d1b2fe391fff2610dfc35283b5
Review budget exhausted: no
Maintainer decision required: no
Thanks @johntmyers. I checked your two remediation updates in the author-only delta: canonical serialization now covers the relevant nested protobuf maps while preserving repeated-field order, and advisor canonicalization narrows a copied inspection contract to the observed port before owner selection.
Blocking findings:
- No blocking findings remain.
GATOR-6b82f885-01andGATOR-6b82f885-02are resolved by this head.
Carried findings:
- None.
Docs: Fern documentation and the related CLI skill/reference cover the user-visible review-token and application-error behavior.
Next state: gator:in-review pending required E2E dispatch; pipeline watch begins only after a current-head E2E workflow is queued, running, or complete.
|
Label |
|
@johntmyers Fix looks good to me. Ran a 30-min session with agent auto-approver, checking for the failure condition. 8 ambiguous agent policy proposal attempts happened in the session, each rejected before review (vs failing after approval) |
Build and validate the exact effective-policy candidate before approval, bind review to live policy/provider/credential inputs, and preserve inspected endpoint contracts during mechanistic expansion. Closes #2821 Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Serialize nested protobuf maps in stable key order for proposal review tokens and effective-policy hashes. Narrow reused multi-port endpoint contracts to the denied port so advisor proposals cannot widen binary access. Add regressions for both cases. Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Create the issue 2821 regression sandbox detached with a durable canonical main process so policy denial, approval, and hot-reload checks run before lifecycle exit. Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
d9d38a5 to
8e77aef
Compare
CI Diagnosis and E2E Test AttestationThe three failures had one lifecycle/test mismatch:
Current The issue-specific regression had the same one-shot-main-process assumption, so
Test summary
Additional verification:
|
johntmyers
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Validation: Project-valid implementation of accepted issue #2821, covering exact-candidate evaluation, actionable application failures, and preservation of inspected endpoint contracts.
Head SHA: 8e77aef742289e49d008571081f0814efe7968e1
Base SHA: de4c1fecf564cd16854447ec9c08659e7b64061b
Merge base SHA: de4c1fecf564cd16854447ec9c08659e7b64061b
Patch ID: a706ae97aee1ad413ab12fbd3ceb531ac450a34c
Gator payload: 4
Review mode: follow_up
Previous reviewed SHA: d9d38a561944dd041342c004dbfe6ff5b3c8d8de
Review budget exhausted: no
Maintainer decision required: no
Thanks @johntmyers. I checked the latest author-only delta and confirmed that it changes the issue regression to create a detached sandbox with a durable canonical process before exercising denial, approval, and hot reload. The two earlier reviewed commits are patch-equivalent across the rebase, so the prior resolutions remain valid. I also considered @zredlined's maintainer report that repeated ambiguous proposals were rejected before review; it is consistent with the intended fail-closed behavior and does not introduce a new obligation.
Blocking findings:
- No blocking findings remain.
GATOR-6b82f885-01andGATOR-6b82f885-02remain resolved.
Carried findings:
- None.
Docs: Fern documentation and the related CLI skill/reference cover the user-visible review-token and application-error behavior; the latest delta changes only E2E lifecycle setup.
Next state: gator:watch-pipeline; current-head Branch Checks and E2E workflows are running.
Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Implemented the approve-all follow-up in What changed
Regression coverage
Verification
|
johntmyers
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Validation: Project-valid implementation of accepted issue #2821, covering exact-candidate evaluation, actionable application failures, and preservation of inspected endpoint contracts.
Head SHA: 22e595cb1749f2494d4cac8c3f63fbe42f94db84
Base SHA: de4c1fecf564cd16854447ec9c08659e7b64061b
Merge base SHA: de4c1fecf564cd16854447ec9c08659e7b64061b
Patch ID: 748f0cdcd8a263791af8d06c47b699cfcba91eb1
Gator payload: 4
Review mode: critical_only
Previous reviewed SHA: 8e77aef742289e49d008571081f0814efe7968e1
Review budget exhausted: yes
Maintainer decision required: no
Thanks @johntmyers. I checked your bulk-approval update in the author-only delta, including the one-snapshot staging path, one-write persistence guard, stale-input rejection, provider-layer validation, per-chunk conflict handling, and TUI result wording. The critical-only convergence pass found no newly introduced Critical defect.
Blocking findings:
- No blocking findings remain.
GATOR-6b82f885-01andGATOR-6b82f885-02remain resolved.
Carried findings:
- None.
Docs: Existing Fern documentation covers the user-visible review-token and application-error behavior; this delta updates the bulk RPC contract and TUI wording without introducing a new setup flow.
Next state: gator:watch-pipeline; current-head Branch Checks and Helm Lint are green, and the required E2E workflow is queued/running.
Monitoring CompleteMonitoring is complete because this PR has merged. Head SHA: Final status: the PR merged while gator was monitoring the pipeline. I removed the active |
Summary
Fixes policy-advisor approval so the prover evaluates the exact effective-policy candidate that can actually be applied. Reviews are bound to live policy, provider, and non-secret credential inputs; changed inputs refresh the candidate and require fresh review, while unchanged candidates reuse the stored prover result.
Related Issue
Closes #2821
Changes
Testing
mise run pre-commitpassesmise run cipassescargo test -p openshell-policycargo test -p openshell-server grpc::policy::testsmise run go:cimise run sdk:ts:cimise run e2e:mechanistic-existing-endpointmise run e2e:dockerChecklist